﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Marmat.Foundation
{
    /// <summary>
    /// 权限管理的逻辑接口。
    /// </summary>
    public interface IPermissionManager
    {

        /// <summary>
        /// 获取系统所有的权限集合。
        /// </summary>
        /// <returns></returns>
        IEnumerable<IPermissionEntity> GetPermissionCollection();

        /// <summary>
        /// 创建角色组。
        /// </summary>
        /// <param name="groupName">创建的角色对象。</param>
        /// <returns></returns>
        IRoleEntity CreateRoleGroup(string groupName);

        /// <summary>
        /// 创建角色。
        /// </summary>
        /// <param name="parentName">分组的名称。</param>
        /// <param name="roleName">角色的名称。</param>
        /// <returns></returns>
        IRoleEntity CreateRole(string parentName, string roleName);


        /// <summary>
        /// 重命名角色/角色组的名称。
        /// </summary>
        /// <param name="role_id">角色/角色组的ID。</param>
        /// <param name="roleName">角色的名称。</param>
        /// <returns></returns>
        void ReNameRole(string role_id, string roleName);

        /// <summary>
        /// 删除指定的角色。
        /// </summary>
        /// <param name="role_ids">角色id</param>
        void DeleteRole(string[] role_ids);

        /// <summary>
        /// 获取所有的角色。
        /// </summary>
        IEnumerable<IRoleEntity> GetRoleCollection();

        /// <summary>
        /// 获取系统管理员的用户集合。
        /// </summary>
        /// <returns></returns>
        IEnumerable<IUserEntity> GetAdminUserCollection();

        /// <summary>
        /// 获取指定角色的用户集合。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <returns></returns>
        IEnumerable<IUserEntity> GetRoleUserCollection(string role_id);

        ///// <summary>
        ///// 获取默认用户的权限集合。
        ///// </summary>
        ///// <returns></returns>
        //IEnumerable<IPermissionEntity> GetDefaultUserPermissionCollection();

        /// <summary>
        /// 获取指定角色的权限集合。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <returns></returns>
        IEnumerable<IPermissionEntity> GetRolePermissionCollection(string role_id);

        /// <summary>
        /// 添加管理员。
        /// </summary>
        /// <param name="user_ids">用户id的集合</param>
        /// <returns></returns>
        void AddAdminUserCollection(string[] user_ids);

        /// <summary>
        /// 移除管理员。
        /// </summary>
        /// <param name="user_ids">用户id的集合</param>
        /// <returns></returns>
        void RemoveAdminUserCollection(string[] user_ids);

        /// <summary>
        /// 给指定的角色批量添加用户。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <param name="user_ids">用户id的集合</param>
        /// <returns></returns>
        void AddRoleUserCollection(string role_id, string[] user_ids);

        /// <summary>
        /// 移除指定角色的用户。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <param name="user_ids">用户id的集合</param>
        /// <returns></returns>
        void RemoveRoleUserCollection(string role_id, string[] user_ids);

        ///// <summary>
        ///// 给默认的用户批量添加权限。
        ///// </summary>
        ///// <param name="permission_ids">权限id的集合</param>
        ///// <returns></returns>
        //void AddDefaultPermissionCollection(string[] permission_ids);

        ///// <summary>
        ///// 给默认的用户批量移除权限。
        ///// </summary>
        ///// <param name="permission_ids">权限id的集合</param>
        ///// <returns></returns>
        //void RemoveDefaultPermissionCollection(string[] permission_ids);

        /// <summary>
        /// 给指定的角色批量添加权限。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <param name="permission_ids">权限id的集合</param>
        /// <returns></returns>
        void AddRolePermissionCollection(string role_id, string[] permission_ids);

        /// <summary>
        /// 给指定的角色批量移除权限。
        /// </summary>
        /// <param name="role_id">角色id</param>
        /// <param name="permission_ids">权限id的集合</param>
        /// <returns></returns>
        void RemoveRolePermissionCollection(string role_id, string[] permission_ids);
    }
}
